import numpy as np
import csv
import random
from datetime import datetime
from time import strftime


'''
Global and Local Empirical Bayes Smoothers with Gamma Model
'''

def getCurTime():
    """
    get current time
    Return value of the date string format(%Y-%m-%d %H:%M:%S)
    """
    format='%Y-%m-%d %H:%M:%S'
    sdate = None
    cdate = datetime.now()
    try:
        sdate = cdate.strftime(format)
    except:
        raise ValueError
    return sdate

def build_data_list(inputCSV):
    sKey = []
    fn = open(inputCSV, "rb")
    ra = csv.DictReader(fn, dialect="excel")
    
    for record in ra:
        #print record[ra.fieldnames[0]], type(record[ra.fieldnames[-1]])
        for item in ra.fieldnames:
            temp = float(record[item])
            sKey.append(temp)
    sKey = np.array(sKey)
    sKey.shape=(-1,len(ra.fieldnames))

    fn.close()
    return sKey

def build_data_list_withoutColumnName(inputCSV):
    sKey = []
    fn = open(inputCSV, "rb")
    ra = csv.reader(fn)

    rows = np.array(list(ra), dtype=float) # define ur data type 'dtype = int or float or complex'
    print rows

    '''
    Data type	Description
    bool	Boolean (True or False) stored as a byte
    int	Platform integer (normally either int32 or int64)
    int8	Byte (-128 to 127)
    int16	Integer (-32768 to 32767)
    int32	Integer (-2147483648 to 2147483647)
    int64	Integer (9223372036854775808 to 9223372036854775807)
    uint8	Unsigned integer (0 to 255)
    uint16	Unsigned integer (0 to 65535)
    uint32	Unsigned integer (0 to 4294967295)
    uint64	Unsigned integer (0 to 18446744073709551615)
    float	Shorthand for float64.
    float16	Half precision float: sign bit, 5 bits exponent, 10 bits mantissa
    float32	Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
    float64	Double precision float: sign bit, 11 bits exponent, 52 bits mantissa
    complex	Shorthand for complex128.
    complex64	Complex number, represented by two 32-bit floats (real and imaginary components)
    complex128	Complex number, represented by two 64-bit floats (real and imaginary components)
    '''

    fn.close()
    return rows


#--------------------------------------------------------------------------
#MAIN

if __name__ == "__main__":
    print "begin at " + getCurTime()

    filepath = 'C:/_DATA/migration_census_2000/REDCAPLUS_100Region/'
    file = filepath + 'temp.csv'
    print file
    data = build_data_list_withoutColumnName(file)
    print data
    